/**
 * 享元模式 : Flyweight
 * 声明 : 轻量级对象结构型模式；主要用于减少创建对象的数量，以减少内存占用和提高性能。
 * 定义：在有大量对象时，有可能会造成内存溢出，我们把其中共同的部分抽象出来。如果有相同的业务请求，直接返回在内存中已有的对象，避免重新创建。
 * 享元结构 : 可以共享的相同内容称为内部状态(Intrinsic State),需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State)。
 * 单纯享元 : 单纯享元模式中，所有的享元对象都是可以共享的，即所有抽象享元类的子类都可共享
 * <p>
 * 典型使用： 1、系统有大量相似对象。 2、需要缓冲池的场景。
 * 抽象的享元角色(Flyweight) : 所有具体享元类的父类，通过这个接口传入外部状态并作用于外部状态。
 * 具体的享元角色(ConcreteFlyweight) : 抽象的享元角色的具体实现类。
 * 享元工厂角色(FlyweightFactory) : 负责创建和管理享元角色。提供一个用于存储享元对象的享元池，用唯一标识码判断享元角色，如果在享元池中有，则返回这个唯一标识码所标识的享元对象。
 */
package name.ealen.flyweight;